'\" t
.TH "SYSCTL\&.D" "5" "" "systemd 231" "sysctl.d"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
sysctl.d \- 在启动时配置内核参数
.SH "SYNOPSIS"
.PP
/etc/sysctl\&.d/*\&.conf
.PP
/run/sysctl\&.d/*\&.conf
.PP
/usr/lib/sysctl\&.d/*\&.conf
.SH "描述"
.PP
在系统启动时，
\fBsystemd-sysctl.service\fR(8)
根据上面列出的配置文件设置
\m[blue]\fBsysctl(8)\fR\m[]\&\s-2\u[1]\d\s+2
内核参数。
.SH "配置文件格式"
.PP
配置文件的格式是 一系列"KEY=VALUE"行(每行一对)。 空行以及以
"#"
或
";"
开头的行都将被忽略。
.PP
注意，在KEY内部，可以使用
"/"
或
"\&."
作为分隔符。 如果第一个分隔符是
"/"
， 那么其余的分隔符将保持原样； 如果第一个分隔符是
"\&."
，那么互换所有的
"/"
与
"\&."
； 例如，"kernel\&.domainname=foo"
等价于
"kernel/domainname=foo"
，都会将
"foo"
写入
/proc/sys/kernel/domainname
参数中。 同样的，"net\&.ipv4\&.conf\&.enp3s0/200\&.forwarding"
等价于
"net/ipv4/conf/enp3s0\&.200/forwarding"
， 都是指
/proc/sys/net/ipv4/conf/enp3s0\&.200/forwarding
参数。
.PP
sysctl\&.d/
中的设置将在系统启动的早期被应用。 针对网络接口的配置， 则会在对应的网络接口出现的时候被应用， 具体说来就是
net\&.ipv4\&.conf\&.*,
net\&.ipv6\&.conf\&.*,
net\&.ipv4\&.neigh\&.*,
net\&.ipv6\&.neigh\&.*
参数。
.PP
许多 sysctl 参数仅在加载相应的内核模块之后才可用。 因为内核模块是按需动态加载的 (例如在插入新硬件或启动网络时)， 所以在系统启动早期运行的
\fBsystemd-sysctl.service\fR(8)
无法设置那些依赖于特定内核模块的参数。 对于这些参数， 首选的方法是通过
\fBudev\fR(7)
规则来设置， 次选的方法是将这些模块添加到
\fBmodules-load.d\fR(5)
中， 因为
\fBmodules-load.d\fR(5)
中的模块会在运行
\fBsystemd-sysctl.service\fR(8)
前被无条件的静态加载(参见"例子"小节)。
.SH "配置目录及其优先级"
.PP
配置文件依次从
/etc/,
/run/,
/usr/lib/
目录中读取。 配置文件的名称必须符合
\fIfilename\fR\&.conf
格式。 对于不同目录下的同名配置文件，仅以优先级最高的目录中的那一个为准。 具体说来就是：
/etc/
的优先级最高、
/run/
的优先级居中、
/usr/lib/
的优先级最低。
.PP
软件包应该将自带的配置文件安装在
/usr/lib/
目录中。
/etc/
目录仅供系统管理员使用。 所有的配置文件(无论位于哪个目录中)，统一按照文件名的字典顺序处理。 如果在多个配置文件中设置了同一个选项， 那么仅以文件名最靠后(字典顺序)的那一个为准。 为了便于排序，建议给所有配置文件 都加上两位十进制数字的文件名前缀。
.PP
如果系统管理员想要屏蔽
/usr/lib/
目录中的某个配置文件， 那么最佳做法是在
/etc/
目录中 创建一个指向
/dev/null
的同名符号链接， 即可彻底屏蔽
/usr/lib/
目录中的同名文件。 如果软件包自带的某个配置文件位于 initrd 镜像中， 那么还必须重新生成 initrd 镜像。
.SH "例子"
.PP
\fBExample\ \&1.\ \&设置内核YP域名\fR
.PP
/etc/sysctl\&.d/domain\-name\&.conf:
.sp
.if n \{\
.RS 4
.\}
.nf
kernel\&.domainname=example\&.com
.fi
.if n \{\
.RE
.\}
.PP
\fBExample\ \&2.\ \&利用udev规则设置动态内核模块的参数(方法一)\fR
.PP
/etc/udev/rules\&.d/99\-bridge\&.rules:
.sp
.if n \{\
.RS 4
.\}
.nf
ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", \e
      RUN+="/usr/lib/systemd/systemd\-sysctl \-\-prefix=/net/bridge"
.fi
.if n \{\
.RE
.\}
.PP
/etc/sysctl\&.d/bridge\&.conf:
.sp
.if n \{\
.RS 4
.\}
.nf
net\&.bridge\&.bridge\-nf\-call\-ip6tables = 0
net\&.bridge\&.bridge\-nf\-call\-iptables = 0
net\&.bridge\&.bridge\-nf\-call\-arptables = 0
.fi
.if n \{\
.RE
.\}
.PP
因为此方法在加载模块的同时设置模块的参数， 所以仅在加载
br_netfilter
模块之后才能过滤桥接包， 若不想过滤桥接包， 只要不加载
br_netfilter
模块即可。
.PP
\fBExample\ \&3.\ \&利用 modules\-load\&.d 目录设置动态内核模块的参数(方法二)\fR
.PP
/etc/modules\-load\&.d/bridge\&.conf:
.sp
.if n \{\
.RS 4
.\}
.nf
br_netfilter
.fi
.if n \{\
.RE
.\}
.PP
/etc/sysctl\&.d/bridge\&.conf:
.sp
.if n \{\
.RS 4
.\}
.nf
net\&.bridge\&.bridge\-nf\-call\-ip6tables = 0
net\&.bridge\&.bridge\-nf\-call\-iptables = 0
net\&.bridge\&.bridge\-nf\-call\-arptables = 0
.fi
.if n \{\
.RE
.\}
.PP
因为此方法总是无条件的加载
br_netfilter
模块， 并且总是无条件的设置模块的参数， 所以总是无条件的过滤桥接包，若不想过滤桥接包， 必须主动卸载
br_netfilter
模块。
.SH "参见"
.PP
\fBsystemd\fR(1),
\fBsystemd-sysctl.service\fR(8),
\fBsystemd-delta\fR(1),
\m[blue]\fBsysctl(8)\fR\m[]\&\s-2\u[1]\d\s+2,
\fBsysctl.conf\fR(5),
\fBmodprobe\fR(8)
.SH "NOTES"
.IP " 1." 4
sysctl(8)
.RS 4
\%[set $man.base.url.for.relative.links]//man/sysctl.html
.RE
.\" manpages-zh translator: 金步国
.\" manpages-zh comment: 金步国作品集：http://www.jinbuguo.com
